package com.caijb.unsafe;

import java.util.concurrent.locks.LockSupport;

/**
 * Unsafe类是Java中一个非常特殊、强大且危险的类，它提供了一些底层操作，允许Java程序直接操作内存和执行一些不安全的操作。Unsafe类的功能主要包括以下几个方面：
 * 内存操作：Unsafe类提供了allocateMemory()、copyMemory()、freeMemory()等方法，可以直接分配内存、复制内存块等操作，绕过了Java的内存管理机制。
 * CAS操作：Unsafe类提供了compareAndSwapXXX()等CAS操作的方法，可以实现乐观锁的功能，用于实现高效的并发算法。
 * 锁操作：通过park()、unpark()方法实现线程的挂起和唤醒，提供了更灵活的线程控制机制。
 * 对象操作：Unsafe类提供了对象字段的偏移量获取、字段值的设置与获取、数组操作等方法，可以直接操作对象的内存布局。
 * Unsafe类的底层实现主要是通过本地方法来实现的，通过JNI（Java Native Interface）
 * 调用底层C/C++的方法来完成一些需要操作系统或硬件支持的底层操作，绕过了Java虚拟机的安全机制。
 * Unsafe类的使用需要谨慎，因为直接操作内存和线程可能会导致安全性问题和程序崩溃，
 * 不推荐在生产环境中使用。Unsafe类主要用于JDK内部的一些高级库和框架，
 * 如ConcurrentHashMap、AtomicInteger等，普通开发者一般不需要直接使用。
 * @author caijb
 * @version 1.0
 * @data 2025/10/25 13:32
 */
public class UnsafeDemo {
    public static void main(String[] args) throws InterruptedException {
        parkDemo();
    }
    /**
     * 线程阻塞和唤醒
     */
    private static void parkDemo() throws InterruptedException {
        Thread thread = new Thread(() -> {
            System.out.println("线程开始执行");
            System.out.println("线程进入阻塞状态");
            LockSupport.park();
            System.out.println("线程执行完毕");
        });
        thread.start();
        System.out.println("主线程开始执行");
        Thread.sleep(5000);
        LockSupport.unpark(thread);
    }
}
